草庐IT

c++ - 纯虚拟 friend 类

全部标签

java - 什么是弱全局引用?它与全局引用有何不同?

JNI中的弱全局引用是什么?它与全局引用和本地引用有何不同? 最佳答案 我认为您的问题的答案可以在这里找到:http://java.sun.com/docs/books/jni/html/refs.html如其所写:Localandglobalreferenceshavedifferentlifetimes.Localreferencesareautomaticallyfreed,whereasglobalandweakglobalreferencesremainvaliduntiltheyarefreedbytheprogramm

java - JNI 直接缓冲区。谁负责 native 缓冲区释放?

一方面,假设我们有一个使用env->NewDirectByteBuffer()创建的直接字节缓冲区。另一方面,我们有类似的直接缓冲区,但使用ByteBuffer.allocateDirect()创建。显然,这两个对象都应该由JVM以相同的方式管理,包括管理后备native缓冲区,在第一种情况下由用户提供,在第二种情况下由JVM从native堆中分配。当然,JVM必须在第二个对象的GC期间释放后备缓冲区(使用ByteBuffer.allocateDirect()实例化)。我的问题是:JVM会在第一个对象的GC期间尝试释放缓冲区(使用env->NewDirectByteBuffer()实例

java - 如果我使用 JNI 从 C 的多个线程调用 java 函数会怎样?

此链接似乎表明“它只是有效”:(在7.3附加native线程下的底部相当远)http://java.sun.com/docs/books/jni/html/invoke.html我不明白这怎么可能,嵌入式JVM会自动启动自己的线程吗?或者排队JNI调用?否则怎么可能多次调用同一个虚拟机。我没有指示执行任何线程?我能想到的任何工作方式是,如果java代码将简单地在与c代码相同的调用线程中执行。那是对的吗?这意味着我不必在Java中执行任何线程。 最佳答案 jvm不必创建自己的线程,方法调用在创建它们的native线程上执行。Attac

java - 使用 SWIG 从 Java 访问结构中的指针数组

我有这样的东西:typedefstruct{char*content;}Boo;typedefstruct{Boo**data;intsize;}Foo;我想使用SWIG在Java中将Boo**数据转换为包含Boo元素(Boo[])的数组。然后读取数组(我不想从Java代码编辑、删除和创建新数组)。在SWIG文档中描述了如何使用carrays.i和array_functions执行此操作,但是结构的成员data必须是类型嘘*。我的问题有解决方案吗?编辑:时间仓促忘了写想用SWIG生成Java类配合C结构。 最佳答案 解决方法很简单。

java - c中的注释方法

我想知道是否可以像在java语言中注释代码一样在c中注释方法?/****@paramx*@paramy*@return*/protectedbooleanmyMethod(intx,inty){returntrue;}在c中也是这样/****@paramx*@paramy*@return*/intmyMethod(intx,inty){return1;}当然这取决于程序员,但我想知道c程序员是否使用这些@param? 最佳答案 OfcourseitsuptotheprogrammerbutIwouldliketoknowifc-pr

java - JNA C DLL 调试方法?

我有一个DLL,它接受编码字符串输入并对其进行解码。DLL是使用Codeblocks和mingw64在Win764位上制作的。C代码单独运行良好,但是当我在while循环中使用相同的字符串通过JNA运行它时,它被正确解码了大约70%的调用,而其余的则不正确。我想调试这种情况,但我不确定在Java代码将控制权移交给JNA之后该怎么做。或者,任何关于在哪里查看的想法也会有所帮助。C和JNA中的方法签名如下,Java:intDecrypt_Blk(byte[]expkey,byte[]in,intsize,byte[]out);C:__declspec(dllexport)intDecryp

java - 如何减少JVM虚拟内存的使用?

我有一个Java程序可以在具有2GB物理内存和2GB交换空间的Solaris10X86上运行。该程序在Linux64位上运行良好,仅占用约450MB内存。但是当它在Solaris中运行时,它总是报告OutOfMemoryError,我注意到就在错误发生之前,它试图使用>4GB的虚拟内存,这在32位系统上是绝对不可能的。那么为什么JVM会尝试使用那么多的虚拟内存呢?有没有办法告诉JVM不要使用那么多虚拟内存?谢谢。编辑:谢谢大家的意见!这是完整的错误消息:##ThereisinsufficientmemoryfortheJavaRuntimeEnvironmenttocontinue.#

java - 使用C++编写的Java读取共享内存数据

我有一个C/C++应用程序,它在Unix的共享内存中写入数据。现在我想通过使用Java的程序读取共享内存数据。程序应该读取共享内存数据。有可能吗?如果可能,需要一个小的实现。 最佳答案 看看thiscodeproject项目(对于Windows):UsingMemoryMappedFilesandJNItocommunicatebetweenJavaandC++programs或者,this图书馆:CLIPCisanopen-sourceJavalibrarythatgivesdevelopersinterprocesscommun

java - 在 C 中嵌入 Java 库

我将编写一个Java服务器/客户端应用程序,其中客户端并不是真正的客户端(它没有主程序),而是一个库。另外,我要开发一个C模块(fusedriver),需要和服务端交互,所以需要调用客户端的函数。我创建了许多从Java应用程序调用C函数的示例,但没有一个是我需要的。你能给我一个建议或一些提示吗?编辑因为有人不明白我需要什么,我想说得更清楚:我有一个服务器,程序只能使用用Java编写的库与之交互。真正的客户端是用C写的,它必须能够调用库的函数,所以在C中我必须调用java方法 最佳答案 基本上有两种方法可以链接C和Java代码;JNA

java - Zlib Java 与 C 的基准测试

我试图通过切换到C来加速我最初用Java编写的TIFF编码器并编译了Zlib1.2.8定义了Z_SOLO和最小C文件集:adler32.c、crc32.c、deflate.c、trees.c和zutil.c。Java正在使用java.util.zip.Deflater.我编写了一个简单的测试程序来评估压缩级别和速度方面的性能,但我感到困惑的是,无论我需要什么级别,考虑到更高级别所需的时间越来越长,压缩并没有那么多。我还惊讶于Java实际上在压缩和速度方面比VisualStudio发布编译(VC2010)表现得更好:Java:Level1:8424865=>6215200(73,8%)i